﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Facade.Interface;
using Crosland.Automotriz.Facade.Facade;
using Crosland.Automotriz.Seguridad.ControlExeption;
using Crosland.Automotriz.Logic.Funciones;
using Crosland.Automotriz.Core;
using System.Configuration;
using Crosland.Automotriz.Logic.Linq;

namespace Crosland.Automotriz.Web.Canibalizacion
{
	public partial class wFrmCanibalizacionActualizar : System.Web.UI.Page
	{
        private int intIdNegocio = Convert.ToInt32(ConfigurationManager.AppSettings["Negocio"]);
        private iFacadeCanibalizacion facadeCanibalizacion = null;
        private  static String strOperacion = "";
        private static int intIdEstadoArmado = 0;
        private static int intIdEstadoSolicitado = 0;
		protected void Page_Load(object sender, EventArgs e)
		{

            if(Page.IsPostBack==false){

                Panel img = (Panel)Master.FindControl("asp");
                img.Visible = false;
                Panel img2 = (Panel)Master.FindControl("pnlTop");
                img2.Visible = false;
                this.ListarOrganizacionVenta();
                this.ValidaOperacion();

            }
		}

        private void ValidaOperacion() {

            try
            {
                strOperacion = Session["Operacion"].ToString();
                facadeCanibalizacion = new FacadeCanibalizacion();
                if (strOperacion == "M")
                {
                    btnAbrirBusqueda.Enabled = false;
                    int idCab = Convert.ToInt32(Session["idCab"]);
                    List<T_LOG_CANIBALIZACION_CAB_EN> l = facadeCanibalizacion.ListarCanibalizacionPorIdCab(idCab);
                    txtVin.Text = l[0].VIN.ToString();
                    txtMotor.Text = l[0].NRO_MOTOR.ToString();
                    txtnumlote.Text = l[0].NRO_LOTE.ToString();
                    txtMarca.Text =l[0].DES_MARCA==null?String.Empty:l[0].DES_MARCA.ToString();
                    txtModelo.Text =l[0].DES_MODELO==null?String.Empty: l[0].DES_MODELO.ToString();
                    txtColor.Text = l[0].DES_COLOR.ToString();
                    txtAnioFabricacion.Text = l[0].ANIO_FABRICACION.ToString();
                    txtAnioModelo.Text = l[0].ANIO_MODELO.ToString();
                    txtOTSAP.Text = l[0].OT_SAP.ToString();
                    cboOrganizacionVenta.Value = l[0].COD_ORG_VENTAS.ToString();
                    lblnro_motor.Text = l[0].NRO_MOTOR.ToString();
                    intIdEstadoSolicitado = Convert.ToInt32(l[0].ID_ESTADO);
                    intIdEstadoArmado = Convert.ToInt32(l[0].ID_ESTADO_ARMADO);
                    lblCostoDolar.Text = l[0].IMP_COSTO_D.ToString();
                    lblCostoSoles.Text = l[0].IMP_COSTO_S.ToString();
                }else{ cboOrganizacionVenta.Value = "1300".ToString(); }

            }
            catch (Exception ex)
            {

                GuardarExceptionLog(ex.Message, ex, "ValidaOperacion");
                MensajesError(ex.Message, ex, "ValidaOperacion");
            }
            
        
        }

        private void ListarOrganizacionVenta() {
            clsTd_Org_VtaLogic venta = new clsTd_Org_VtaLogic();
            cboOrganizacionVenta.DataSource= venta.lista();
            cboOrganizacionVenta.ValueField = "COD_ORG_VTA";
            cboOrganizacionVenta.TextField = "DES_ORG_VTA";
            cboOrganizacionVenta.DataBind();         
        
        }

        private void ListarVehiculosCanibalizar() {

           facadeCanibalizacion = new FacadeCanibalizacion();
            try
            {
                
                String strNro_Lote=txtPopNroLote.Text;
                int intTop=Convert.ToInt32(cboOpcion.Value);
                grdListadoVehiculos.DataSource = facadeCanibalizacion.ListarStockAlmacenDet(strNro_Lote, intTop);
                grdListadoVehiculos.DataBind();                
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListarVehiculosCanibalizar");
                MensajesError(ex.Message, ex, "ListarVehiculosCanibalizar");            

            }catch(Exception ex){
                GuardarExceptionLog(ex.Message, ex, "ListarVehiculosCanibalizar");
                MensajesError(ex.Message, ex, "ListarVehiculosCanibalizar");
            }       
        
        }

        private void ObtenerDatos() {



            int intIndex = grdListadoVehiculos.FocusedRowIndex;

            if (intIndex == -1) {

                lblmsj.Text = "Debe seleccionar un registro ";
                popupmsj.ShowOnPageLoad = true;
            }

            txtnumlote.Text =grdListadoVehiculos.GetRowValues(intIndex, "NRO_LOTE")==null?String.Empty:grdListadoVehiculos.GetRowValues(intIndex, "NRO_LOTE").ToString();
            txtVin.Text =grdListadoVehiculos.GetRowValues(intIndex, "NRO_CHASIS")==null?String.Empty: grdListadoVehiculos.GetRowValues(intIndex, "NRO_CHASIS").ToString();
            txtAnioModelo.Text =grdListadoVehiculos.GetRowValues(intIndex, "ANIO_MODELO")==null?String.Empty:grdListadoVehiculos.GetRowValues(intIndex, "ANIO_MODELO").ToString();
            txtAnioFabricacion.Text =grdListadoVehiculos.GetRowValues(intIndex, "ANIO_FABRICACION")==null?String.Empty: grdListadoVehiculos.GetRowValues(intIndex, "ANIO_FABRICACION").ToString();
            txtColor.Text =grdListadoVehiculos.GetRowValues(intIndex, "DES_COLOR")==null?String.Empty:grdListadoVehiculos.GetRowValues(intIndex, "DES_COLOR").ToString();
            txtMarca.Text =grdListadoVehiculos.GetRowValues(intIndex, "DES_MARCA")==null?String.Empty:grdListadoVehiculos.GetRowValues(intIndex, "DES_MARCA").ToString();
            txtMotor.Text = grdListadoVehiculos.GetRowValues(intIndex, "NRO_MOTOR") == null ? String.Empty : grdListadoVehiculos.GetRowValues(intIndex, "NRO_MOTOR").ToString();
            lblnro_motor.Text =grdListadoVehiculos.GetRowValues(intIndex, "NRO_MOTOR")==null?String.Empty:grdListadoVehiculos.GetRowValues(intIndex, "NRO_MOTOR").ToString();
            txtModelo.Text = grdListadoVehiculos.GetRowValues(intIndex, "DES_MODELO") == null ? String.Empty : grdListadoVehiculos.GetRowValues(intIndex, "DES_MODELO").ToString();
            lblCostoSoles.Text = grdListadoVehiculos.GetRowValues(intIndex, "IMP_COSTO_S") == null ? String.Empty : grdListadoVehiculos.GetRowValues(intIndex, "IMP_COSTO_S").ToString();
            lblCostoDolar.Text = grdListadoVehiculos.GetRowValues(intIndex, "IMP_COSTO_D") == null ? String.Empty : grdListadoVehiculos.GetRowValues(intIndex, "IMP_COSTO_D").ToString();

            pcCanibalizacion.ShowOnPageLoad = false;
        }


        private void Redireccionar(String strMsg, Boolean boolGrabacion, String vOperacion)
        {
            Session["strMsg"] = strMsg;
            Session["boolGrabacion"] = boolGrabacion;
            Session["vOperacion"] = vOperacion;          
            Response.Redirect("~/Canibalizacion/wFrmCanibalizacion.aspx?id=" + intIdNegocio, false);
        }

        private void Grabar() {

            if (cboOrganizacionVenta.Value == null) {
                lblmsj.Text = "Ingrese la organización venta";
                popupmsj.ShowOnPageLoad = true;
                return;            
            }

              facadeCanibalizacion = new FacadeCanibalizacion();

              try
              {

                  Boolean blValidaInsercion = false;
                  T_LOG_CANIBALIZACION_CAB t_log_canibalizacion_cab = new T_LOG_CANIBALIZACION_CAB();
                  t_log_canibalizacion_cab.VIN = txtVin.Text;
                  t_log_canibalizacion_cab.ID_LOG_CANIBALIZACION_CAB =strOperacion=="M"?Convert.ToInt32(Session["idCab"]):0;
                  t_log_canibalizacion_cab.NRO_MOTOR = lblnro_motor.Text;
                  t_log_canibalizacion_cab.NRO_LOTE = txtnumlote.Text;
                  t_log_canibalizacion_cab.DES_JERARQUIA_SUP = txtMarca.Text;
                  t_log_canibalizacion_cab.DES_COLOR = txtColor.Text;
                  t_log_canibalizacion_cab.COD_ORG_VENTAS = cboOrganizacionVenta.Value.ToString();
                  t_log_canibalizacion_cab.ANIO_MODELO = txtAnioModelo.Text;
                  t_log_canibalizacion_cab.ANIO_FABRICACION = txtAnioFabricacion.Text;
                  t_log_canibalizacion_cab.ID_ESTADO =strOperacion=="M"?intIdEstadoSolicitado: 147;
                  t_log_canibalizacion_cab.ID_USUARIO = Session["User"].ToString();
                  t_log_canibalizacion_cab.ID_ESTADO_ARMADO =strOperacion=="M"?intIdEstadoArmado:153;
                  t_log_canibalizacion_cab.OT_SAP = txtOTSAP.Text.ToString();
                  t_log_canibalizacion_cab.IMP_COSTO_S = lblCostoSoles.Text ==null?0:lblCostoSoles.Text == String.Empty ? 0 : decimal.Parse(lblCostoSoles.Text);
                  t_log_canibalizacion_cab.IMP_COSTO_D=lblCostoDolar.Text==lblCostoDolar.Text==null?0:lblCostoDolar.Text== String.Empty?0: decimal.Parse(lblCostoDolar.Text);
                  blValidaInsercion = strOperacion == "C" ? facadeCanibalizacion.InsertarCanibalizacion(t_log_canibalizacion_cab) : facadeCanibalizacion.Modificar(t_log_canibalizacion_cab);
                  if (blValidaInsercion)
                  {
                      String msg = strOperacion == "C" ? "Se grabó correctamente" : "Se actualizó correctamente";
                      Redireccionar(msg, true, "C");
                  }

              }
              catch (Automotriz.Logic.ControlExeption.DataException ex)
              {
                  GuardarExceptionLog(ex.Message, ex, "Grabar");
                  MensajesError(ex.Message, ex, "Grabar");
              }
              catch (Exception ex) {

                  GuardarExceptionLog(ex.Message, ex, "Grabar");
                  MensajesError(ex.Message, ex, "Grabar");               
              }       
        
        }


        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "GuardarExceptionLog");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "GuardarExceptionLog");
            }

        }

        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            this.ListarVehiculosCanibalizar();
        }

        protected void btnPopAgregar_Click(object sender, EventArgs e)
        {

     
            this.ObtenerDatos();

        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            this.Grabar();
        }

        protected void grdListadoVehiculos_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListarVehiculosCanibalizar();
        }

        protected void grdListadoVehiculos_PageIndexChanged(object sender, EventArgs e)
        {
            this.ListarVehiculosCanibalizar();
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Canibalizacion/wFrmCanibalizacion.aspx?id=" + intIdNegocio);
        }
	}
}